home *** CD-ROM | disk | FTP | other *** search
/ Zoom 2 / Zoom - Release 2 (1996)(Active Software)[!].iso / programming / amos / zone_editor / zone_editor.amos / zone_editor.amosSourceCode
Encoding:
AMOS Source Code  |  1996-04-24  |  12.0 KB  |  602 lines

  1. '
  2. '********************************* 
  3. '
  4. '           ZONE EDITOR
  5. '          --------------
  6. '
  7. '           VERSION 1.2
  8. '
  9. '      ï¿½ MALCOLM LAVERY 1994 
  10. '
  11. '********************************* 
  12. '
  13. 'THIS PROGRAM LETS YOU EDIT SCREEN 
  14. 'ZONES WITH A EASY TO USE EDITER.
  15. '
  16. 'THE ZONE BANK IS SAVED OUT AS A 
  17. 'NORMAL AMOS MEMORY BANK,AND AS  
  18. 'SUCH,CAN BE LOADED AND SAVED WITH 
  19. 'YOUR PROGRAM. 
  20. '
  21. 'ONCE DEFINED AND LOADED,JUST USE
  22. 'THE SIMPLE PROCEDURE PROVIDED.
  23. 'THIS WILL RESERVE AND SET UP THE
  24. 'ZONES ONTO THE SCREEN THAT YOU
  25. 'CHOOSE. 
  26. '
  27. 'BECAUSE THE ZONE BANKS ARE NORMAL 
  28. 'AMOS BANKS,YOU CAN HAVE SEVERAL 
  29. 'ZONE BANKS IN MEMORY AT ONCE,JUST 
  30. 'USE THE BANK SWAP COMMAND BEFORE
  31. 'CALLING THE PROCEDURE.
  32. '
  33. '
  34. '                      FOR MORE EXPERIENCED AMOSERS.   
  35. '                      -----------------------------   
  36. '                      THE BANK FORMAT IS AS FOLLOWS.  
  37. '                      ------------------------------  
  38. '
  39. '   Header    dc.l Address of next bank    Start-24  
  40. '             dc.l Length of bank+16       Start-20  
  41. '             dc.l Number of bank          Start-16
  42. '             dc.w Flag                    Start-12 (3=Chip Work or 1=Fast Data) 
  43. '             dc.w Free for future use     Start-10 (Do not use!)
  44. '             dc.b "Zones   "              Start-8 (Name of bank *8 bytes) 
  45. '
  46. '   Start                                  Returned by START function
  47. '
  48. '             REPT Number of zones                 
  49. '                  
  50. '                  dc.w X1                 Top left X cordinate
  51. '                  dc.w Y1                 Top left Y cordinate
  52. '                  dc.w X2                 Bottom right X cordinate
  53. '                  dc.w Y2                 Bottom right Y cordinate
  54. '
  55. '             ENDR 
  56. '        
  57. '********************************* 
  58. '        SET VARIABLES 
  59. '********************************* 
  60. '
  61. VERSION$="V1.2"
  62. POS=0
  63. PLACE=1
  64. BRIGHTEST=1
  65. DARKEST=0
  66. '
  67. '********************************* 
  68. '    RESERVE DRUM SCORE BANK 
  69. '********************************* 
  70. '
  71. Reserve As Data 10,8
  72. Poke$ Start(10)-8,"Zones"
  73. '
  74. '********************************* 
  75. '    MAKE EM GLOBEL TROTTERS 
  76. '********************************* 
  77. '
  78. Global VERSION$,POS,PLACE,BRIGHTEST,DARKEST
  79. '
  80. '********************************* 
  81. '        SET UP SCREENS
  82. '********************************* 
  83. '
  84. INIT_DISPLAY
  85. _ABOUT
  86. '
  87. '********************************* 
  88. '           MAIN LOOP  
  89. '********************************* 
  90. '
  91. Do 
  92.    IN_SCREEN=Scin(X Mouse,Y Mouse)
  93.    On IN_SCREEN Proc _EDIT,_DUMMY,_DUMMY,MENU
  94. Loop 
  95. '
  96. '
  97. Procedure INIT_DISPLAY
  98.    '
  99.    _FRONT_DISPLAY
  100.    _MENU_DISPLAY[230]
  101.    '
  102.    Screen 0
  103.    Fade 2,$0,$FFF,$333,$BBB,$88F,$F0
  104.    Wait 30
  105.    Screen 4
  106.    Fade 2,$0,$FFF,$333,$BBB,$88F,$F0,$F00,,
  107.    Wait 30
  108.    '
  109.    Limit Mouse 0,0 To 640,512
  110.    '
  111. End Proc
  112. Procedure _FRONT_DISPLAY
  113.    '
  114.    Screen Open 0,640,256,4,Hires
  115.    Curs Off : Flash Off : Cls 0
  116.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0
  117.    '
  118. End Proc
  119. Procedure _MENU_DISPLAY[YPOSITION]
  120.    '
  121.    Screen Open 4,640,70,8,Hires
  122.    Curs Off : Flash Off : Cls 0
  123.    Get Palette 0
  124.    Screen Display 4,,YPOSITION,,
  125.    '
  126.    _3D_DISPLAY[0,0,639,10,1,3]
  127.    _3D_DISPLAY[0,11,639,69,1,3]
  128.    _3D_INFO[290,15,340,14,"",4,3]
  129.    '
  130.    Ink 0,3
  131.    Text 150,8,"ZONE EDITOR "+VERSION$+" BY MALCOLM LAVERY ï¿½1994"
  132.    '
  133.    Reserve Zone 15
  134.    '
  135.    _3D_BUTTON[5,290,34,340,33,1,"ADD",3,0]
  136.    '
  137.    _3D_BUTTON[6,10,15,130,14,1,"LOAD IFF",3,0]
  138.    _3D_BUTTON[7,150,15,130,14,1,"LOAD ABK",3,0]
  139.    _3D_BUTTON[9,10,34,270,14,1,"SAVE ZBK",3,0]
  140.    _3D_BUTTON[10,10,53,130,14,1,"NEW BANK",3,0]
  141.    _3D_BUTTON[11,150,53,130,14,1,"SHOW ZONES",3,0]
  142.    '
  143.    Ink 1,4
  144.    Text 300,25,"           NO ZONES IN MEMORY"
  145.    '
  146. End Proc
  147. Procedure _3D_DISPLAY[X,Y,WIDTH,HEIGHT,IN_OUT,_FILL]
  148.    '
  149.    '
  150.    '
  151.    If IN_OUT=0
  152.       HILIGHT=2
  153.       SHADOW=1
  154.    End If 
  155.    '
  156.    '
  157.    If IN_OUT=1
  158.       HILIGHT=1
  159.       SHADOW=2
  160.    End If 
  161.    '
  162.    '
  163.    Ink HILIGHT
  164.    Draw X,Y To X+WIDTH,Y
  165.    Draw X,Y To X,Y+HEIGHT
  166.    '
  167.    Ink SHADOW
  168.    Draw X+WIDTH,Y To X+WIDTH,Y+HEIGHT
  169.    Draw X+WIDTH,Y+HEIGHT To X,Y+HEIGHT
  170.    '
  171.    Ink _FILL
  172.    Bar X+1,Y+1 To X+WIDTH-1,Y+HEIGHT-1
  173.    '
  174.    '
  175. End Proc
  176. Procedure _3D_BUTTON[_ZONENUMBER,X,Y,WIDTH,HEIGHT,IN_OUT,TEX$,_FILL,_INK]
  177.    '
  178.    '
  179.    '
  180.    LE=Text Length(TEX$)
  181.    X_TEXT=X+WIDTH/2
  182.    Y_TEXT=Y+HEIGHT/2+3
  183.    '
  184.    '
  185.    If IN_OUT=0
  186.       HILIGHT=2
  187.       SHADOW=1
  188.    End If 
  189.    '
  190.    '
  191.    If IN_OUT=1
  192.       HILIGHT=1
  193.       SHADOW=2
  194.    End If 
  195.    '
  196.    '
  197.    Ink HILIGHT
  198.    Draw X,Y To X+WIDTH,Y
  199.    Draw X,Y To X,Y+HEIGHT
  200.    '
  201.    Ink SHADOW
  202.    Draw X+WIDTH,Y To X+WIDTH,Y+HEIGHT
  203.    Draw X+WIDTH,Y+HEIGHT To X,Y+HEIGHT
  204.    '
  205.    Ink _FILL
  206.    Bar X+1,Y+1 To X+WIDTH-1,Y+HEIGHT-1
  207.    '
  208.    Gr Writing 0
  209.    Ink _INK
  210.    Text X_TEXT-LE/2,Y_TEXT,TEX$
  211.    Gr Writing 1
  212.    '
  213.    Set Zone _ZONENUMBER,X,Y To X+WIDTH,Y+HEIGHT
  214.    '  
  215. End Proc
  216. Procedure _HILIGHT[X,Y,WIDTH,HEIGHT,TEX$]
  217.    '
  218.    '
  219.    '
  220.    LE=Text Length(TEX$)
  221.    X_TEXT=X+WIDTH/2
  222.    Y_TEXT=Y+HEIGHT/2+3
  223.    '
  224.    Ink BRIGHTEST
  225.    Draw X,Y To X+WIDTH,Y
  226.    Draw X,Y To X,Y+HEIGHT
  227.    '
  228.    Ink DARKEST
  229.    Draw X+WIDTH,Y To X+WIDTH,Y+HEIGHT
  230.    Draw X+WIDTH,Y+HEIGHT To X,Y+HEIGHT
  231.    '
  232.    Gr Writing 0
  233.    Set Pattern 2
  234.    Ink _DARKEST
  235.    Bar X+1,Y+1 To X+WIDTH-1,Y+HEIGHT-1
  236.    '
  237.    Ink BRIGHTEST
  238.    Text X_TEXT-LE/2,Y_TEXT,TEX$
  239.    Gr Writing 1
  240.    Set Pattern 1
  241.    '  
  242. End Proc
  243. Procedure _3D_INFO[X,Y,WIDTH,HEIGHT,TEX$,_FILL,_INK]
  244.    '
  245.    '
  246.    '
  247.    LE=Text Length(TEX$)
  248.    X_TEXT=X+WIDTH/2
  249.    Y_TEXT=Y+HEIGHT/2+3
  250.    '
  251.    '
  252.    HILIGHT=1
  253.    SHADOW=2
  254.    '
  255.    '
  256.    Ink HILIGHT
  257.    Draw X,Y To X+WIDTH,Y
  258.    Draw X,Y To X,Y+HEIGHT
  259.    '
  260.    Ink SHADOW
  261.    Draw X+WIDTH,Y+1 To X+WIDTH,Y+HEIGHT
  262.    Draw X+WIDTH,Y+HEIGHT To X,Y+HEIGHT
  263.    '
  264.    '
  265.    HILIGHT=2
  266.    SHADOW=1
  267.    '
  268.    '
  269.    Ink HILIGHT
  270.    Draw X+1,Y+1 To X+WIDTH-1,Y+1
  271.    Draw X+1,Y+1 To X+1,Y+HEIGHT-1
  272.    '
  273.    Ink SHADOW
  274.    Draw X+WIDTH-1,Y To X+WIDTH-1,Y+HEIGHT-1
  275.    Draw X+WIDTH-1,Y+HEIGHT-1 To X-1,Y+HEIGHT-1
  276.    '
  277.    Ink _FILL
  278.    Bar X+2,Y+2 To X+WIDTH-2,Y+HEIGHT-2
  279.    '
  280.    Gr Writing 0
  281.    Ink _INK
  282.    Text X_TEXT-LE/2,Y_TEXT,TEX$
  283.    Gr Writing 1
  284.    '  
  285. End Proc
  286. Procedure MENU
  287.    '
  288.    Screen 4
  289.    '
  290.    M=Mouse Zone
  291.    K=Mouse Key
  292.    '
  293.    If K and M=5
  294.       _ADD_TO_BANK
  295.    End If 
  296.    '
  297.    If K and M=6
  298.       _LOAD_IFF
  299.    End If 
  300.    '
  301.    If K and M=7
  302.       _LOAD_ABK
  303.    End If 
  304.    '
  305.    If K and M=9
  306.       _SAVE_ZNK
  307.    End If 
  308.    '
  309.    If K and M=10
  310.       _NEW
  311.    End If 
  312.    '
  313.    If K and M=11
  314.       _3D_BUTTON[11,150,53,130,14,0,"SHOW ZONES",4,0]
  315.       Wait 20
  316.       _OUT
  317.       Repeat 
  318.       Until Mouse Click
  319.       _IN
  320.       Wait 20
  321.       _3D_BUTTON[11,150,53,130,14,1,"SHOW ZONES",3,0]
  322.    End If 
  323.    '
  324. End Proc
  325. Procedure _EDIT
  326.    '
  327.    X=X Screen(1,X Mouse)
  328.    Y=Y Screen(1,Y Mouse)
  329.    '
  330. End Proc
  331. Procedure _CENTRE_TEXT2[Y,TEX$]
  332.    '
  333.    LE=Text Length(TEX$)/2
  334.    '
  335.    Ink 0,3
  336.    '
  337.    Text 320-LE,Y,TEX$
  338.    '
  339. End Proc
  340. Procedure _ABOUT
  341.    '
  342.    Screen 0
  343.    '  
  344.    _3D_DISPLAY[30,15,578,65,0,3]
  345.    '
  346.    _CENTRE_TEXT2[24,"ZONE EDITOR "+VERSION$]
  347.    _CENTRE_TEXT2[32,"-----------------"]
  348.    _CENTRE_TEXT2[42,"WELCOME TO THE ZONE EDITOR,I HOPE THAT YOU ENJOY USING IT"]
  349.    _CENTRE_TEXT2[52,"AND THAT IT IS OF SOME USE TO YOU IN HELPING YOU PRODUCE"]
  350.    _CENTRE_TEXT2[62,"THE PROGRAM YOU WISH TO WRITE."]
  351.    _CENTRE_TEXT2[74,"CLICK LEFT MOUSE BUTTON"]
  352.    '
  353.    Repeat : Until Mouse Click
  354.    '  
  355.    _3D_DISPLAY[30,15,578,65,0,3]
  356.    '
  357.    _CENTRE_TEXT2[24,"GET IN CONTACT WITH ME!!!!"]
  358.    _CENTRE_TEXT2[32,"--------------------------"]
  359.    _CENTRE_TEXT2[42,"MALCOLM LAVERY"]
  360.    _CENTRE_TEXT2[52,"20 SHAKESPEARE AV,ORGILL,EGREMONT"]
  361.    _CENTRE_TEXT2[62,"CUMBRIA,CA22 2HF,ENGLAND"]
  362.    _CENTRE_TEXT2[74,"CLICK LEFT MOUSE BUTTON"]
  363.    '
  364.    Repeat : Until Mouse Click
  365.    '    
  366.    _3D_DISPLAY[30,15,578,65,0,3]
  367.    '
  368.    _CENTRE_TEXT2[24,"THIS PROGRAM IS PUBLIC DOMAIN"]
  369.    _CENTRE_TEXT2[32,"-----------------------------"]
  370.    _CENTRE_TEXT2[42,"THIS PROGRAM IS PUBLIC DOMAIN!"]
  371.    _CENTRE_TEXT2[52,"YOU CAN COPY AND SPREAD IT AS MUCH"]
  372.    _CENTRE_TEXT2[62,"AS YOU LIKE."]
  373.    _CENTRE_TEXT2[74,"CLICK LEFT MOUSE BUTTON"]
  374.    '
  375.    Repeat : Until Mouse Click
  376.    '    
  377.    _3D_DISPLAY[30,15,578,65,0,3]
  378.    '
  379.    _CENTRE_TEXT2[24,"NOW LOAD A IFF/.ABK PICTURE"]
  380.    _CENTRE_TEXT2[32,"---------------------------"]
  381.    _CENTRE_TEXT2[42,"THE PICTURE CAN BE ANY SIZE,AS LONG AS IT IS"]
  382.    _CENTRE_TEXT2[52,"NO BIGGER THAN THE VIEWABLE SCREEN AREA!."]
  383.    _CENTRE_TEXT2[62,"HIRES OR LOWRES AND ANY NUMBER OF COLOURS."]
  384.    _CENTRE_TEXT2[74,"CLICK LEFT MOUSE BUTTON"]
  385.    '
  386.    Repeat : Until Mouse Click
  387.    '  
  388.    Cls 0
  389.    '
  390. End Proc
  391. Procedure _LOAD_IFF
  392.    '
  393.    _3D_BUTTON[6,10,15,130,14,0,"LOAD IFF",4,0]
  394.    '
  395.    F$=Fsel$("*.IFF","","LOAD IFF PICTURE","")
  396.    '
  397.    If F$=""
  398.       _3D_BUTTON[6,10,15,130,14,1,"LOAD IFF",3,0]
  399.       Pop Proc
  400.    End If 
  401.    '
  402.    If Exist(F$)
  403.       '
  404.       Load Iff F$,0
  405.       _BRIGHTEST[0]
  406.       _DARKEST[0]
  407.       Screen To Front 4
  408.       
  409.       '
  410.    End If 
  411.    '
  412.    Screen 4
  413.    _3D_BUTTON[6,10,15,130,14,1,"LOAD IFF",3,0]
  414.    '
  415. End Proc
  416. Procedure _LOAD_ABK
  417.    '
  418.    _3D_BUTTON[7,150,15,130,14,0,"LOAD ABK",4,0]
  419.    '
  420.    F$=Fsel$("*.ABK","","LOAD ABK PICTURE","")
  421.    '
  422.    If F$=""
  423.       _3D_BUTTON[7,150,15,130,14,1,"LOAD ABK",3,0]
  424.       Pop Proc
  425.    End If 
  426.    '
  427.    If Exist(F$)
  428.       '
  429.       Load F$,9
  430.       Unpack 9 To 0
  431.       _BRIGHTEST[0]
  432.       _DARKEST[0]
  433.       Erase 9
  434.       Screen To Front 4
  435.       '
  436.    End If 
  437.    '
  438.    Screen 4
  439.    _3D_BUTTON[7,150,15,130,14,1,"LOAD ABK",3,0]
  440.    '
  441. End Proc
  442. Procedure _SAVE_ZNK
  443.    '
  444.    _3D_BUTTON[9,10,34,270,14,0,"SAVE ZBK",4,0]
  445.    '
  446.    F$=Fsel$("*.ZNK","","SAVE .ZNK BANK","")
  447.    '
  448.    If F$=""
  449.       _3D_BUTTON[9,10,34,270,14,1,"SAVE ZBK",3,0]
  450.       Pop Proc
  451.    End If 
  452.    '
  453.    L=Length(10)-8
  454.    Bank Shrink 10 To L
  455.    Poke$ Start(10)-8,"Zones"
  456.    F$=Upper$(F$)
  457.    Save F$,10
  458.    '
  459.    Screen 4
  460.    _3D_BUTTON[9,10,34,270,14,1,"SAVE ZBK",3,0]
  461.    '
  462. End Proc
  463. Procedure _ADD_TO_BANK
  464.    '
  465.    _3D_BUTTON[5,290,34,340,33,0,"ADD",4,0]
  466.    '
  467.    L=Length(10)
  468.    '
  469.    Reserve As Work 11,L+8
  470.    '
  471.    Copy Start(10),Start(10)+Length(10) To Start(11)
  472.    '
  473.    Reserve As Data 10,Length(11)
  474.    Copy Start(11),Start(11)+Length(11) To Start(10)
  475.    Poke$ Start(10)-8,"Zones"
  476.    '
  477.    Erase 11
  478.    '
  479.    _GET
  480.    '
  481.    _3D_INFO[290,15,340,14,"ZONE "+Mid$(Str$(PLACE),2)+"   "+Mid$(Str$(Deek(Start(10)+POS)),2)+","+Mid$(Str$(Deek(Start(10)+POS+2)),2)+"  TO  "+Mid$(Str$(Deek(Start(10)+POS+4)),2)+","+Mid$(Str$(Deek(Start(10)+POS+6)),2),4,1]
  482.    '
  483.    Inc PLACE
  484.    Add POS,8
  485.    '
  486.    _IN
  487.    '
  488.    Wait 20
  489.    '
  490.    _3D_BUTTON[5,290,34,340,33,1,"ADD",3,0]
  491.    '
  492. End Proc
  493. Procedure _DUMMY
  494. End Proc
  495. Procedure _GET
  496.    '
  497.    _OUT
  498.    '
  499.    Screen 0
  500.    '
  501.    Change Mouse 2
  502.    '
  503.    Repeat 
  504.       X1=X Screen(0,X Mouse)
  505.       Y1=Y Screen(0,Y Mouse)
  506.       IN_SCREEN=Scin(X Mouse,Y Mouse)
  507.    Until Mouse Click=1 and IN_SCREEN=0
  508.    '
  509.    Wait 10
  510.    Gr Writing 3
  511.    '
  512.    Repeat 
  513.       X2=X Screen(0,X Mouse)
  514.       Y2=Y Screen(0,Y Mouse)
  515.       IN_SCREEN=Scin(X Mouse,Y Mouse)
  516.       '
  517.       If X2>X1 and Y2>Y1
  518.          Ink BRIGHTEST,0
  519.          Box X1,Y1 To X2,Y2
  520.          Box X1,Y1 To X2,Y2
  521.       End If 
  522.       '
  523.    Until Mouse Click=1 and X2>X1+2 and Y2>Y1+2 and IN_SCREEN=0
  524.    '
  525.    Gr Writing 1
  526.    '
  527.    _HILIGHT[X1,Y1,X2-X1,Y2-Y1,Mid$(Str$(PLACE),2)]
  528.    '
  529.    Doke(Start(10)+POS),X1
  530.    Doke(Start(10)+POS+2),Y1
  531.    Doke(Start(10)+POS+4),X2
  532.    Doke(Start(10)+POS+6),Y2
  533.    '
  534.    Change Mouse 1
  535.    '
  536.    Screen 4
  537.    '
  538. End Proc
  539. Procedure _BRIGHTEST[_SCREEN]
  540.    '
  541.    Screen _SCREEN
  542.    CO=Screen Colour
  543.    BRIGHTEST=0
  544.    For CO_A=0 To CO-1
  545.       If Hex$(Colour(BRIGHTEST))<Hex$(Colour(CO_A))
  546.          Swap BRIGHTEST,CO_A
  547.       End If 
  548.    Next CO_A
  549.    '
  550. End Proc
  551. Procedure _DARKEST[_SCREEN]
  552.    '
  553.    Screen _SCREEN
  554.    CO=Screen Colour
  555.    DARKEST=0
  556.    For CO_A=0 To CO
  557.       If Hex$(Colour(DARKEST))>Hex$(Colour(CO_A))
  558.          Swap DARKEST,CO_A
  559.       End If 
  560.    Next CO_A
  561.    '
  562. End Proc
  563. Procedure _OUT
  564.    '
  565.    Wait 20
  566.    For SY=230 To 320 Step 4
  567.       Screen Display 4,,SY,,
  568.       Wait Vbl 
  569.    Next SY
  570.    '
  571. End Proc
  572. Procedure _IN
  573.    '
  574.    Wait 20
  575.    For SY=320 To 230 Step -4
  576.       Screen Display 4,,SY,,
  577.       Wait Vbl 
  578.    Next SY
  579.    '
  580. End Proc
  581. Procedure _NEW
  582.    '
  583.    _3D_BUTTON[10,10,53,130,14,0,"NEW BANK",4,0]
  584.    '
  585.    Reserve As Data 10,8
  586.    Poke$ Start(10)-8,"Zones"
  587.    PLACE=1
  588.    POS=0
  589.    '
  590.    Screen 0
  591.    Cls 0
  592.    Screen 4
  593.    '
  594.    Wait 20
  595.    '
  596.    Ink 1,4
  597.    Text 300,25,"           NO ZONES IN MEMORY          "
  598.    '
  599.    _3D_BUTTON[10,10,53,130,14,1,"NEW BANK",3,0]
  600.    
  601.    '
  602. End Proc